package com.yixing.tech.common.utils;

import java.util.LinkedList;
import java.util.List;

/**
 * @author yixing tech
 */
public class Graph<T> {
    /**
     * 节点个数
     */
    private Integer nodeSize;
    /**
     * 节点
     */
    private List<T> node;
    /**
     * 邻接表
     */
    private LinkedList[] adj;

    public Graph(List<T> node) {
        this.nodeSize = node.size();
        this.node = node;
        this.adj = new LinkedList[nodeSize];
        for (int i = 0; i < adj.length; i++) {
            adj[i] = new LinkedList();
        }
    }

    /**
     * 在节点之间加边，前驱节点指向后继节点
     *
     * @param front 前驱节点所在下标
     * @param end   后继节点所在下标
     */
    public void addEdge(int front, int end) {
        adj[front].add(end);
    }


    public Integer getNodeSize() {
        return nodeSize;
    }

    public List<T> getNode() {
        return node;
    }

    public LinkedList[] getAdj() {
        return adj;
    }
}
